package com.hyt.it.ogt.kq.service.gov.service;

import java.util.List;
import java.util.Optional;

import com.baomidou.mybatisplus.extension.service.IService;
import com.hyt.it.ogt.kq.service.gov.model.entity.TaskConfig;
import com.hyt.it.ogt.kq.service.gov.model.param.TaskOffLineConfig;

/**
 * <p>
 * 考试任务配置表 服务类
 * </p>
 *
 * @author huangyh
 * @since 2021-03-08
 */
public interface ITaskConfigService extends IService<TaskConfig> {

    /**
     * 通过考试任务id获取考试任务配置
     * @param id 考试任务id
     * @return 考试任务配置
     */
    List<TaskConfig> getByTaskId(String id);

    List<TaskOffLineConfig> getTaskOffLineConfigByTaskId(String id);

    /**
     * 批量更新-根据code
     * @param taskConfigList
     */
    void updateByCode(List<TaskConfig> taskConfigList);

    /**
     * 任务参数表初始化
     * @param taskId
     * @param officeId
     */
    void initTaskConfig(String taskId,String officeId);

    /**
     * 根据考试任务编号获取考试系统类型
     * @param taskCode 考试任务编号
     * @return 考试系统类型
     */
    String getExamSystemTypeByTaskCode(String taskCode);

    /**
     * 根据考试任务id获取考试系统类型
     * @param taskId 考试任务id
     * @return 考试系统类型
     */
    Optional<String> getExamSystemTypeByTaskId(String taskId);

    /**
     * 根据考试任务编号获取考试系统版本号
     * @param taskCode 考试任务编号
     * @return 考试系统版本号
     */
    String getExamSystemVersionByTaskCode(String taskCode);

    /**
     * 复制任务配置数据
     * @param newId 新的任务id
     * @param oldId 被复制的任务id
     * @param userName 用户名称
     */
    void copyTaskConfig(String newId, String oldId, String userName);

    /**
     * 获取考试任务配置值
     * @param taskId
     * @param code
     * @return
     */
    String getTaskConfigValue(String taskId, String code);

    /**
     * 检查是否为证券考试类型
     * @param taskId
     * @return
     */
    Boolean obtType(String taskId);

    /**
     * 根据考试任务编号、配置参数code获取考试任务配置值
     * @param taskCode 考试任务编号
     * @param code 配置参数code
     * @return 考试任务配置值
     */
    String getValueByTaskCode(String taskCode, String code);

    /**
     * 根据考试任务id获取考试任务配置（仅code和value）
     * @param taskId 考试任务id
     * @return 考试任务配置
     */
    List<TaskConfig> listByTaskId(String taskId);

    /**
     * 根据考试任务编号获取考试任务配置（仅code和value）
     * @param taskCode 考试任务编号
     * @return 考试任务配置
     */
    List<TaskConfig> listByTaskCode(String taskCode);

    /**
     * 根据配置code从配置list中获取value
     * @param taskConfigList 配置list
     * @param code 配置code
     * @return value值
     */
    String getValueByCode(List<TaskConfig> taskConfigList, String code);

}
